package net.tngou.tpage.action.api;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;

import com.alibaba.fastjson.JSONObject;

import net.tngou.tpage.action.BaseAction;
import net.tngou.tpage.jdbc.PageUtil;
import net.tngou.tpage.pojo.POJO;
import net.tngou.tpage.pojo.User;
import net.tngou.tpage.service.UserService;
import net.tngou.tpage.util.DigestMD;
import net.tngou.tpage.util.OAuthUtil;
import net.tngou.tpage.util.StringUtil;

/**
 * 用户
 * @author tngou@tngou.net
 *
 */
public class UserApi extends BaseAction {

	@Override
	public void execute() throws ServletException, IOException {
		String keyword = ask.getKeyword();
		Map<String, Object> map = new HashMap<>();
		if(StringUtil.isNotEmpty(keyword))
		{
			map.put("id", keyword);
			map.put("account", keyword);
			map.put("name", keyword);
			map.put("phone", keyword);
			map.put("email", keyword+"%");
		}
		PageUtil page = service.getPage(ask.getPage(), ask.getRows(),map, User.class);		
		printJson(toJsonPage(page));
	}
	
	
	/**
	 * 添加用户（管理者）
	 */
	@SuppressWarnings("serial")
	public void add() {
		if(user==null){
			run_nologin();return;
		}
		if(user.getRole()!=1)
		{
			run_false("没有添加用户权限");return;
			
		}	
	
		User bean = getAsk(User.class);
		if(isEmpty(bean.getAccount(),bean.getPassword(),bean.getName()))//账号、密码、姓名
		{
			run_false("请求的参数不正确！");return;	
		}			
		POJO u = bean.get(new HashMap<String,Object>(){{
			put("account", bean.getAccount());
		}});
		if(u!=null){
			run_false("该账号已经存在！");return;	
		}
		bean.setPassword(DigestMD.MD5(bean.getPassword()));
		String access_token = OAuthUtil.Access_token(user.getAccount(),bean.getPassword());
		String refresh_token = OAuthUtil.Refresh_token(user.getAccount());
		bean.setAccess_token(access_token);
		bean.setRefresh_token(refresh_token);
		long b = bean.save();
		if(b>0){	
			run_success("添加成功！",b);
		}else {run_false("添加失败！");return;}
		
	}
	
	/**
	 * 重置密码/账号（管理者）
	 */
	public void init() {
		if(user==null)
		{
			run_nologin();return;
		}
		if(user.getRole()!=1){
			run_false("没有修改用户权限");return;
		}
		User bean = getAsk(User.class);
		if(bean.getId()<=0||isEmpty(bean.getPassword(),bean.getAccount()))
		{
			run_false("请求的参数不正确！");return;
		}
		User u = bean.get(bean.getId());
		if(u==null)
		{
			run_false("没有修改用户权限！");return;
		}
		if(!u.getAccount().equals(bean.getAccount()))//更新账号
		{
			@SuppressWarnings("serial")
			POJO p = bean.get(new HashMap<String,Object>(){{
				put("account", bean.getAccount());
			}});
			if(p!=null){
				run_false("该账号已经存在！");return;	
			}
			u.setAccount(bean.getAccount());
		}
		
		if(bean.getInit()==0)u.setInit(0);
		else u.setInit(1);
		u.setPassword(DigestMD.MD5(bean.getPassword()));	
		UserService service = new UserService();
		String access_token = OAuthUtil.Access_token(u.getAccount(),u.getPassword());
		String refresh_token = OAuthUtil.Refresh_token(u.getAccount());
		session.deleteUser(u.getAccess_token());//删除Session的缓存
		u.setAccess_token(access_token);
		u.setRefresh_token(refresh_token);
		long b = u.update();	
		service.saveLogin(access_token, refresh_token, u);//更新Login记录
		if(b>0){
			run_success("更新成功");
		}
		else run_false("添加失败！");return;
		
	}
	
	
	/**
	 * 修改用户（管理者）
	 */
	public void change() {
		if(user==null)
		{
			run_nologin();return;
		}
	
		 if(user.getRole()!=1)//自己不能管理自己
		{
			run_false("没有修改用户权限！");return;
		}
		if(user.getId()==ask.getId())
		{
			run_false("自己不能管理自己！");return;
		}
		User bean = getAsk(User.class);
		if(bean.getId()<=0)
		{
			run_false("没有修改的用户资料！");return;
		}
		User u = bean.get(bean.getId());
		if(u==null)
		{
			run_false("没有修改用户权限！");return;
		}
	
		Map<String, Object> map = new HashMap<>();
		if(StringUtil.isNotEmpty(bean.getName()))map.put("name", bean.getName());//名称
		if(StringUtil.isNotEmpty(bean.getPhone()))map.put("phone", bean.getPhone());//电话
		if(StringUtil.isNotEmpty(bean.getEmail()))map.put("email", bean.getEmail());//邮箱
		if(StringUtil.isNotEmpty(bean.getRemark()))map.put("position", bean.getRemark());//备注
		if(StringUtil.isNotEmpty(request.getParameter("role")))map.put("role", bean.getRole());//角色
		if(StringUtil.isNotEmpty(request.getParameter("isuse")))map.put("isuse", bean.getIsuse());//角色
		//if(bean.getRole()!=u.getRole())map.put("role", bean.getRole());//角色
		//if(bean.getIs()!=u.getRole())map.put("role", bean.getRole());//角色
		long b = bean.update(map,bean.getId());
		if(b>0){
			run_success("修改成功");}
		else run_false("修改失败");
	}
	
	/**
	 * 更新用户信息（自己）
	 */
	public void update() {
		if(user==null)
		{
			run_nologin();return;
		}
		User bean = getAsk(User.class);
		if(StringUtil.isNotEmpty(bean.getName()))user.setName(bean.getName());//名称
		if(StringUtil.isNotEmpty(bean.getPhone()))user.setPhone(bean.getPhone());//电话
		if(StringUtil.isNotEmpty(bean.getEmail()))user.setEmail(bean.getEmail());//邮箱
		if(StringUtil.isNotEmpty(bean.getRemark()))user.setRemark(bean.getRemark());//备注
		long b = user.update();
		if(b>0)
		{
			 session.setUser(user);
			 run_success("更新成功！");
		}else
		{
			run_false("更新失败！");
		}		

	}
	
	
	/**
	 * 重置密码（自己）
	 */
	public void resetpwd() {
		if(user==null)
		{
			run_nologin();return;
		}
		String pwd=request.getParameter("pwd");//原始密码
		String password=request.getParameter("password");//新密码
		
		if(isEmpty(pwd,password))
		{
			run_false("请求的参数不正确！");return;
		}
		
		pwd=DigestMD.MD5(pwd);
		password=DigestMD.MD5(password);	
		if(!user.getPassword().equals(pwd))
		{
			run_false("原始密码错误！");return;
		}
		if(pwd.equals(password))
		{
			run_false("新密码不能与原始密码一样！");return;
		}
		UserService service = new UserService();
		String access_token = OAuthUtil.Access_token(user.getAccount(),password);
		String refresh_token = OAuthUtil.Refresh_token(user.getAccount());

		user.setInit(0);
		response.addAutoLoginCookie(access_token);//  修改密码做 临时 Cookie
		service.saveLogin(access_token, refresh_token, user);
		session.deleteUser(tngou_id);//Session 删除缓存
		user.setAccess_token(access_token);
		user.setRefresh_token(refresh_token);
		user.setPassword(password);
		session.setUser(user);
		JSONObject object = new JSONObject();
		object.put("access_token", access_token);
		object.put("msg", "密码修改成功！");
		printJson(toJsonP(object));
	}
	
}
